package cn.com.surker.system.dao;

import cn.com.surker.system.entity.SysUser;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import org.apache.ibatis.annotations.Param;

import java.util.Date;
import java.util.List;
import java.util.Map;

/**
 * <p>
 * 用户表 Mapper 接口
 * </p>
 *
 * @author lucky
 * @since 2021-02-22
 */
public interface SysUserDao extends BaseMapper<SysUser> {

    /**
     * 根据电话查询在职账号
     * @param phone
     * @return
     */
    SysUser queryByOneUser(String phone);

    /**
     * 根据用户名查询
     * @param username
     * @return
     */
    SysUser queryByUsername(String username);

    /**
     * 根据姓名查询用户
     * @param name
     * @return
     */
    SysUser queryByName(String name);

    /**
     * 根据用户名修改信息
     * @param position 职位
     * @param cardNo 身份证
     * @param sex 性别
     * @param username 用户名
     * @return
     */
    Integer updateByName(String position, String cardNo, String sex, String username);

    /**
     * 同步新增用户
     * @param user
     * @return
     */
    Integer saveUser(SysUser user);

    /**
     * 查询用户所在部门
     * @param uid 用户ID
     * @param type 企业类型(0:集团公司，1：部门，2：工厂)
     * @return
     */
    List<Map<String, Object>> queryOrigin(Long uid, Integer type );

    /**
     * 查询所有部门信息
     * @param uid       用户ID
     * @param type      用户ID    部门类型
     * @param oid       用户ID    所属站点
     * @param status    用户ID    与用户绑定状态
     * @return
     */
    List<Map<String, Object>> queryRelation(Long uid, Integer type, Long oid, Integer status);

    /**
     * 查询用户总条数
     * @param user
     * @return
     */
    Integer queryUserTotal(SysUser user);

    SysUser isCheckUser(String nickname);

    /**
     * 查询生日员工信息
     * @param birthday
     * @return
     */
    List<SysUser> queryBirthday(String birthday);

	/**
	 * 查询用户信息（根据公司站点）
	 * @param orgId			站点名
	 * @param roleId		角色名
	 * @return
	 */
	List<SysUser> queryUser(Long orgId, String roleId);


	List<SysUser> queryUserByOrgIds(@Param("orgIds") List<Long> orgIds, @Param("name") String name, @Param("phone") String phone, @Param("status") Integer status);

	/**
	 * 查询用户绑定的岗位,包含所属站点
	 * @param userId
	 * @return
	 */
	List<Map<String, Object>> userPosition(Long userId);

	/**
	 * 根据用户站点，岗位查询用户信息
	 * @param orgId
	 * @param posId
	 * @param isDefault		是否默认
	 * @return
	 */
	List<SysUser> queryUsersByOrgPos(Long orgId, Long posId,Integer isDefault);

	/**
	 * 根据工厂查询出纳人员信息
	 * @param orgId
	 * @return
	 */
	List<SysUser> queryFinanceUser(Long orgId);

	/**
	 * 根据部门及岗位查询用户
	 * @param pid 岗位ID
	 * @param orgId 部门ID
	 * @return
	 */
	SysUser queryByOrgPosition(Long pid, Long orgId);

	/**
	 * 查询某个部门的某个领导管理的人员
	 * @param orgId
	 * @param leaderUserId
	 * @return
	 */
	List<SysUser> findUsersByLeader(Long orgId,Long leaderUserId);

	List<SysUser> findUserByClock(Long deptId, Date sDate, Date eDate);

	List<SysUser> queryByPosUser(String position);

	/**
	 * 根据姓名、公司查询用户
	 * @param orgId 公司ID
	 * @param name 姓名
	 * @return
	 */
	List<SysUser> queryByNameOrOrgName(Long orgId, String name);

	List<SysUser> queryByOrgAndPosV2(@Param("orgId") Long orgId, @Param("position") String position,
									 @Param("position1") String position1);

	/**
	 * 根据站点,岗位查询用户
	 *
	 * @param orgId
	 * @param posList
	 * @return
	 */
	List<SysUser> queryByOrgAndPosV3(@Param("orgId") Long orgId, @Param("posList") String... posList);

	/**
	 * 根据部门,查询用户
	 * @param orgIds			组织机构id
	 * @param name			用户名
	 * @return
	 */
	List<SysUser> queryUserByOrgIds(String name,String phone,List<Long> orgIds);
}
